package com.c2b.algorithm.leetcode.base;

/**
 * 4的幂
 * <p>给定一个整数，写一个函数来判断它是否是 4 的幂次方。如果是，返回 true ；否则，返回 false 。</p>
 *
 * @author c2b
 * @since 2022/5/19 13:56
 */
public class LC0342 {
    /**
     * 判断n 是否是 4 的幂次方
     *
     * @param n 整数n
     * @return boolean 如果是，返回 true ；否则，返回 false
     * @author c2b
     * @since 2022/5/19 13:57
     */
    public boolean isPowerOfFour(int n) {
        // 首先判断是不是2的幂
        if (n > 0 && (n & (n - 1)) == 0) {
            int count = 0;
            while (n != 0) {
                if ((n & 1) == 1) {
                    count++;
                }
                n >>= 2;
            }
            return count == 1;
        }
        return false;
    }

    public boolean isPowerOfFour2(int n) {
        // 首先判断是不是2的幂
        if (n > 0 && (n & (n - 1)) == 0) {
            // 1 2 4 8 16 32 64 128 256 512
            // 1   4   16    64     256
            return n % 3 == 1;
        }
        return false;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 1000000; i++) {
            if (new LC0342().isPowerOfFour(i)) {
                System.out.println(i);
            }
        }
    }
}
